/* 
 * Copyright (C) 2005,2006,2007 MaNGOS <http://www.mangosproject.org/>
 * Copyright (C) 2007 NoxForum.net <http://www.noxforum.net/>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

/// \addtogroup u2w
/// @{
/// \file

#ifndef _OPCODES_H
#define _OPCODES_H

/// List of OpCodes
enum OpCodes
{
	MSG_PARTIAL_TIMESTAMP = 0x27,
	MSG_FULL_TIMESTAMP,
	MSG_NEED_TIMESTAMP,
	MSG_SIMULATED_TIMESTAMP,
	MSG_USE_MAP,
	MSG_JOIN_DATA,
	MSG_NEW_PLAYER,
	MSG_PLAYER_QUIT,
	MSG_SIMPLE_OBJ,
	MSG_COMPLEX_OBJ,
	MSG_DESTROY_OBJECT,
	MSG_OBJECT_OUT_OF_SIGHT,
	MSG_OBJECT_IN_SHADOWS,
	MSG_OBJECT_FRIEND_ADD,
	MSG_OBJECT_FRIEND_REMOVE,
	MSG_RESET_FRIENDS,
	MSG_ENABLE_OBJECT,
	MSG_DISABLE_OBJECT,
	MSG_DRAW_FRAME,
	MSG_DESTROY_WALL,
	MSG_OPEN_WALL,
	MSG_CLOSE_WALL,
	MSG_CHANGE_OR_ADD_WALL_MAGIC,
	MSG_REMOVE_WALL_MAGIC,
	MSG_PLAYER_INPUT,
	MSG_PLAYER_SET_WAYPOINT,
	MSG_REPORT_HEALTH,
	MSG_REPORT_HEALTH_DELTA,
	MSG_REPORT_PLAYER_HEALTH,
	MSG_REPORT_ITEM_HEALTH,
	MSG_REPORT_MANA,
	MSG_REPORT_POISON,
	MSG_REPORT_STAMINA,
	MSG_REPORT_STATS,
	MSG_REPORT_ARMOR_VALUE,
	MSG_REPORT_GOLD,
	MSG_REPORT_PICKUP,
	MSG_REPORT_MODIFIABLE_PICKUP,
	MSG_REPORT_DROP,
	MSG_REPORT_LESSON,
	MSG_REPORT_MUNDANE_ARMOR_EQUIP,
	MSG_REPORT_MUNDANE_WEAPON_EQUIP,
	MSG_REPORT_MODIFIABLE_WEAPON_EQUIP,
	MSG_REPORT_MODIFIABLE_ARMOR_EQUIP,
	MSG_REPORT_ARMOR_DEQUIP,
	MSG_REPORT_WEAPON_DEQUIP,
	MSG_REPORT_TREASURE_COUNT,
	MSG_REPORT_FLAG_BALL_WINNER,
	MSG_REPORT_FLAG_WINNER,
	MSG_REPORT_DEATHMATCH_WINNER,
	MSG_REPORT_DEATHMATCH_TEAM_WINNER,
	MSG_REPORT_ENCHANTMENT,
	MSG_REPORT_ITEM_ENCHANTMENT,
	MSG_REPORT_LIGHT_COLOR,
	MSG_REPORT_LIGHT_INTENSITY,
	MSG_REPORT_Z_PLUS,
	MSG_REPORT_Z_MINUS,
	MSG_REPORT_EQUIP,
	MSG_REPORT_DEQUIP,
	MSG_REPORT_ACQUIRE_SPELL,
	MSG_REPORT_TARGET,
	MSG_REPORT_CHARGES,
	MSG_REPORT_X_STATUS,
	MSG_REPORT_PLAYER_STATUS,
	MSG_REPORT_MODIFIER,
	MSG_REPORT_STAT_MODIFIER,
	MSG_REPORT_NPC,
	MSG_REPORT_CLIENT_STATUS,
	MSG_REPORT_ANIMATION_FRAME,
	MSG_REPORT_ACQUIRE_CREATURE,
	MSG_REPORT_LOSE_CREATURE,
	MSG_REPORT_EXPERIENCE,
	MSG_REPORT_SPELL_AWARD,
	MSG_REPORT_SPELL_START,
	MSG_REPORT_INVENTORY_LOADED,
	MSG_TRY_DROP,
	MSG_TRY_GET,
	MSG_TRY_USE,
	MSG_TRY_EQUIP,
	MSG_TRY_DEQUIP,
	MSG_TRY_TARGET,
	MSG_TRY_CREATURE_COMMAND,
	MSG_TRY_SPELL,
	MSG_TRY_ABILITY,
	MSG_TRY_COLLIDE,
	MSG_FX_PARTICLEFX,
	MSG_FX_PLASMA,
	MSG_FX_SUMMON,
	MSG_FX_SUMMON_CANCEL,
	MSG_FX_SHIELD,
	MSG_FX_BLUE_SPARKS,
	MSG_FX_YELLOW_SPARKS,
	MSG_FX_CYAN_SPARKS,
	MSG_FX_VIOLET_SPARKS,
	MSG_FX_EXPLOSION,
	MSG_FX_LESSER_EXPLOSION,
	MSG_FX_COUNTERSPELL_EXPLOSION,
	MSG_FX_THIN_EXPLOSION,
	MSG_FX_TELEPORT,
	MSG_FX_SMOKE_BLAST,
	MSG_FX_DAMAGE_POOF,
	MSG_FX_LIGHTNING,
	MSG_FX_ENERGY_BOLT,
	MSG_FX_CHAIN_LIGHTNING_BOLT,
	MSG_FX_DRAIN_MANA,
	MSG_FX_CHARM,
	MSG_FX_GREATER_HEAL,
	MSG_FX_MAGIC,
	MSG_FX_SPARK_EXPLOSION,
	MSG_FX_DEATH_RAY,
	MSG_FX_SENTRY_RAY,
	MSG_FX_RICOCHET,
	MSG_FX_JIGGLE,
	MSG_FX_GREEN_BOLT,
	MSG_FX_GREEN_EXPLOSION,
	MSG_FX_WHITE_FLASH,
	MSG_FX_GENERATING_MAP,
	MSG_FX_ASSEMBLING_MAP,
	MSG_FX_POPULATING_MAP,
	MSG_FX_DURATION_SPELL,
	MSG_FX_DELTAZ_SPELL_START,
	MSG_FX_TURN_UNDEAD,
	MSG_FX_ARROW_TRAP,
	MSG_FX_VAMPIRISM,
	MSG_FX_MANA_BOMB_CANCEL,
	MSG_UPDATE_STREAM,
	MSG_NEW_ALIAS,
	MSG_AUDIO_EVENT,
	MSG_AUDIO_PLAYER_EVENT,
	MSG_TEXT_MESSAGE,
	MSG_INFORM,
	MSG_IMPORTANT,
	MSG_IMPORTANT_ACK,
	MSG_MOUSE,
	MSG_INCOMING_CLIENT,
	MSG_OUTGOING_CLIENT,
	MSG_GAME_SETTINGS,
	MSG_GAME_SETTINGS_2,
	MSG_UPDATE_GUI_GAME_SETTINGS,
	MSG_DOOR_ANGLE,
	MSG_OBELISK_CHARGE,
	MSG_PENTAGRAM_ACTIVATE,
	MSG_CLIENT_PREDICT_LINEAR,
	MSG_REQUEST_MAP,
	MSG_CANCEL_MAP,
	MSG_MAP_SEND_START,
	MSG_MAP_SEND_PACKET,
	MSG_MAP_SEND_ABORT,
	MSG_SERVER_CMD,
	MSG_SYSOP_PW,
	MSG_SYSOP_RESULT,
	MSG_KEEP_ALIVE,
	MSG_RECEIVED_MAP,
	MSG_CLIENT_READY,
	MSG_REQUEST_SAVE_PLAYER,
	MSG_XFER_MSG,
	MSG_PLAYER_OBJ,
	MSG_TEAM_MSG,
	MSG_KICK_NOTIFICATION,
	MSG_TIMEOUT_NOTIFICATION,
	MSG_SERVER_QUIT,
	MSG_SERVER_QUIT_ACK,
	MSG_TRADE,
	MSG_CHAT_KILL,
	MSG_MESSAGES_KILL,
	MSG_SEQ_IMPORTANT,
	MSG_REPORT_ABILITY_AWARD,
	MSG_REPORT_ABILITY_STATE,
	MSG_REPORT_ACTIVE_ABILITIES,
	MSG_DIALOG,
	MSG_REPORT_GUIDE_AWARD,
	MSG_INTERESTING_ID,
	MSG_TIMER_STATUS,
	MSG_REQUEST_TIMER_STATUS,
	MSG_JOURNAL_MSG,
	MSG_CHAPTER_END,
	MSG_REPORT_ALL_LATENCY,
	MSG_REPORT_FLAG_STATUS,
	MSG_REPORT_BALL_STATUS,
	MSG_REPORT_OBJECT_POISON,
	MSG_REPORT_MONITOR_CREATURE,
	MSG_REPORT_UNMONITOR_CREATURE,
	MSG_REPORT_TOTAL_HEALTH,
	MSG_REPORT_TOTAL_MANA,
	MSG_REPORT_SPELL_STAT,
	MSG_REPORT_SECONDARY_WEAPON,
	MSG_REPORT_LAST_QUIVER,
	MSG_INFO_BOOK_DATA,
	MSG_SOCIAL,
	MSG_FADE_BEGIN,
	MSG_MUSIC_EVENT,
	MSG_MUSIC_PUSH_EVENT,
	MSG_MUSIC_POP_EVENT,
	MSG_PLAYER_DIED,
	MSG_PLAYER_RESPAWN,
	MSG_FORGET_DRAWABLES,
	MSG_RESET_ABILITIES,
	MSG_RATE_CHANGE,
	MSG_REPORT_CREATURE_CMD,
	MSG_VOTE,
	MSG_STAT_MULTIPLIERS,
	MSG_GAUNTLET,
	MSG_INVENTORY_FAIL
};

//if you add new opcode .. Do NOT forget to change the following define MAX_OPCODE_ID and also add new opcode to table in opcodes.cpp
#define MAX_OPCODE_ID 0xF1

/// Results of friend related commands
enum FriendsResult
{
    FRIEND_DB_ERROR                               = 0x00,
    FRIEND_LIST_FULL                              = 0x01,
    FRIEND_ONLINE                                 = 0x02,
    FRIEND_OFFLINE                                = 0x03,
    FRIEND_NOT_FOUND                              = 0x04,
    FRIEND_REMOVED                                = 0x05,
    FRIEND_ADDED_ONLINE                           = 0x06,
    FRIEND_ADDED_OFFLINE                          = 0x07,
    FRIEND_ALREADY                                = 0x08,
    FRIEND_SELF                                   = 0x09,
    FRIEND_ENEMY                                  = 0x0A,
    FRIEND_IGNORE_FULL                            = 0x0B,
    FRIEND_IGNORE_SELF                            = 0x0C,
    FRIEND_IGNORE_NOT_FOUND                       = 0x0D,
    FRIEND_IGNORE_ALREADY                         = 0x0E,
    FRIEND_IGNORE_ADDED                           = 0x0F,
    FRIEND_IGNORE_REMOVED                         = 0x10
};

/// Non Player Character flags
enum NPCFlags
{
    UNIT_NPC_FLAG_NONE              = 0,
    UNIT_NPC_FLAG_GOSSIP            = 1,
    UNIT_NPC_FLAG_QUESTGIVER        = 2,
    UNIT_NPC_FLAG_VENDOR            = 4,
    UNIT_NPC_FLAG_TAXIVENDOR        = 8,
    UNIT_NPC_FLAG_TRAINER           = 16,
    UNIT_NPC_FLAG_SPIRITHEALER      = 32,
    UNIT_NPC_FLAG_GUARD             = 64,                   //UQ1: ???  We can use as guard flag?, used by blizz for BattleGround spirit guides... (entry 13116 and 13117)
    UNIT_NPC_FLAG_INNKEEPER         = 128,
    UNIT_NPC_FLAG_BANKER            = 256,
    UNIT_NPC_FLAG_PETITIONER        = 512,                  // 1024+512 = guild petitions, 512 = arena team petitions
    UNIT_NPC_FLAG_TABARDVENDOR      = 1024,
    UNIT_NPC_FLAG_BATTLEFIELDPERSON = 2048,
    UNIT_NPC_FLAG_AUCTIONEER        = 4096,
    UNIT_NPC_FLAG_STABLE            = 8192,
    UNIT_NPC_FLAG_ARMORER           = 16384,
};
#endif
/// @}
